#include "tcpserver.h"
#include "widget.h"
#include "task_runnable.h"
#include "client_manager.h"
#include <QThreadPool>


TcpServer::TcpServer(QObject *parent):QTcpServer(parent) {
    QThreadPool::globalInstance()->setMaxThreadCount(2);
}


void TcpServer::incomingConnection(qintptr handle)
{
  qDebug()<<"当有客户端连接时被调用"<<handle;

  //为每个客户端创建一个QRunnable对象，执行相关的通讯代码
  TaskRunnable  * task = new TaskRunnable(handle);

  //默认就是run执行完毕之后自动删除QRunnable对象
  // runnable->setAutoDelete(true);

  //连接线程对象的信号槽
  connect( task, &TaskRunnable::showMessage , (Widget*) parent(),   &Widget::showMessage);

  //加入到客户端列表中去
  ClientManager::getInstance().addTask(task);

  //在线程池中，获取一个线程来执行QRunable
  QThreadPool::globalInstance()->start(task);



}

void TcpServer::sendData(const QByteArray &arr) {
  // 分别调用每个线程的发送
  ClientManager::getInstance().sendData(arr);
}


void TcpServer::closeServer() {
  this->close();
  ClientManager::getInstance().closeAllClients();
  //等待线程池中所有线程结束
  QThreadPool::globalInstance()->waitForDone();
}
